/**
 * @file DynamicArray.h
 * @author 申飞麟
 * @brief 动态数组头文件
 * @date 2025.1.31
 */

#ifndef DYNAMICARRAY_H
#define DYNAMICARRAY_H

#include <stddef.h>
#include <inttypes.h>

typedef struct DynamicArray ///< 动态数组
{
    int32_t *pdata; ///< 动态数组指针
    size_t length;  ///< 动态数组成员数
} DynamicArray;

typedef enum DynamicArrayStatus ///< 动态数组状态
{
    DYNAMICARRAY_NOERROR = 0,    ///< 无异常
    DYNAMICARRAY_ERROR_NOMALLOC, ///< 内存分配失败
    DYNAMICARRAY_ERROR_OVERFLOW, ///< 数组访问溢出
    DYNAMICARRAY_ERROR_PNULL,    ///< 指针为空
    DYNAMICARRAY_ERROR_UNDEFINED ///< 未定义行为
} DynamicArrayStatus;

DynamicArrayStatus DynamicArrayCreate(DynamicArray *arr, const size_t length);
void DynamicArrayDelete(DynamicArray *arr);
DynamicArrayStatus DynamicArraySet(DynamicArray *arr, const size_t ID, const int32_t value);
DynamicArrayStatus DynamicArrayGet(DynamicArray *arr, const size_t ID, int32_t *value);
DynamicArrayStatus DynamicArrayAddStart(DynamicArray *arr, const int32_t value);
DynamicArrayStatus DynamicArrayAddEnd(DynamicArray *arr, const int32_t value);
DynamicArrayStatus DynamicArrayChange(DynamicArray *arr, const int32_t Changelength, DynamicArray *overflow);
void DynamicArrayTraverse(DynamicArray *arr);

#endif
